package com.linghang.wusthelpercompetition.utils;

import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.tms.v20200713.TmsClient;
import com.tencentcloudapi.tms.v20200713.models.TextModerationRequest;  // 修正：使用TMS服务的Request类
import com.tencentcloudapi.tms.v20200713.models.TextModerationResponse; // TMS服务的Response类
import io.micrometer.common.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

@Slf4j
@Component
public class TencentTmsUtils {
    @Autowired
    private TencentTmsProperties tencentTmsProperties;

    /**
     * 敏感词过滤（基于腾讯云TMS服务）
     */
    public Boolean getTmsResult(String content) {
        // 空内容直接返回通过
        if (StringUtils.isEmpty(content) || StringUtils.isEmpty(content.trim())) {
            return Boolean.TRUE;
        }
        Credential cre = new Credential(tencentTmsProperties.getSecretId(), tencentTmsProperties.getSecretkey());
        TmsClient client = new TmsClient(cre, "ap-shanghai");
        // 初始化TMS客户端（使用try-with-resources自动关闭，需TmsClient支持AutoCloseable）
        try {
            // 构建TMS请求对象（使用TMS服务的Request类）
            TextModerationRequest request = new TextModerationRequest();

            // 设置业务类型（BizType），处理可能的格式错误
            String bizType = tencentTmsProperties.getBizType();
            if (StringUtils.isNotBlank(bizType)) {
                try {
                    request.setBizType(bizType);
                } catch (NumberFormatException e) {
                    log.warn("无效的BizType格式（必须为数字）: {}", bizType);
                    // 可选：设置默认值，如 request.setBizType(10000L);
                }
            }
            // 2. 核心修改：将文本转换为UTF-8编码的Base64字符串
            // 步骤1：将原始文本用UTF-8编码为字节数组
            byte[] utf8Bytes = content.getBytes(StandardCharsets.UTF_8);
            // 步骤2：将字节数组转换为Base64字符串
            String base64Content = Base64.getEncoder().encodeToString(utf8Bytes);
            // 步骤3：设置编码后的内容到请求中
            request.setContent(base64Content);
//            // 设置待检测的文本内容
//            request.setContent(content);

            // 调用TMS接口执行检测
            TextModerationResponse response = client.TextModeration(request);

            // 处理检测结果
            if (response != null) {
                String suggestion = response.getSuggestion(); // 建议：Pass/Review/Block
                String label = response.getLabel();         // 标签：Normal/Porn/Abuse等
                log.info("TMS检测结果 - 敏感类型: {}, 处理建议: {}", label, suggestion);
                return "Pass".equals(suggestion); // 仅当建议"通过"时返回true
            } else {
                log.warn("TMS接口未返回有效结果");
                return Boolean.FALSE;
            }

        } catch (TencentCloudSDKException e) {
            log.error("TMS接口调用异常（腾讯云SDK错误）: {}", e.getMessage(), e);
            return Boolean.FALSE; // 接口异常时默认返回false（严格模式）
        } catch (Exception e) {
            log.error("文本审核过程发生未知异常", e);
            return Boolean.FALSE;
        }
    }
}